package com.tedu.api.thread;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * Lambda表达式-->（）->{}【接口|抽象类--匿名内部类】
 *                      【集合遍历--匿名内部类】
 * Collection--->List:存重复元素并且有序
 *                set:存无序并且不重复
 * Map-----------HashMap:键值对存储
 *
 */
public class LambdaDemo {
    @Test
    public void tesList(){
        //List集合：保存元素
        List<String> list=new ArrayList<>();
        list.add("金珉奎");
        list.add("崔胜澈");
        list.add("全圆佑");
        list.add("崔韩率");
        //集合三种遍历方式：普通for、增强for、forEach方法
        for(String str:list){
            System.out.println("增强for："+str);
        }
        //支持forEach方法：遍历集合元素  Consumer针对List集合接口
        //Consumer接口针对List集合提供接口：功能获取List集合元素
        //accept（） 获取list集合的所有元素
        list.forEach(new Consumer<String>() {
            public void accept(String s) {
                System.out.println("consumer接口遍历方案"+s);
            }
        });
        //支持forEach方法：遍历集合元素【Consumer 匿名内部类】
        //编写Lambda表达式写法
        list.forEach(s-> System.out.println("Lambda遍历方法"+s));

    }

    @Test
    public void testMap(){
        //创建Map集合：键值对
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"Mingyu");
        map.put(2,"DK");
        map.put(3,"Dino");
        map.put(4,"The8");
        //遍历集合：普通for、增强for、forEach（BiCanSummer接口--匿名内部类）
        //键值对-->组Entry对象
        //BiConSummer接口--获取Entry对象--accept（）获取Entry对象
        map.forEach(new BiConsumer<Integer, String>() {
            public void accept(Integer integer, String s) {
                System.out.println("键："+integer+"值："+s);
            }
        });
        //使用Lambda表达式
        map.forEach((i,s)->System.out.println("Lambda值:"+s));
    }
    /**
     * 作业：1、使用Lambda表达式完成Thread线程创建
     *      2、使用Lambda表达式完成Runnable线程创建
     *      3、IO流--File类:listFile(FileFilter接口)【五行代码】
     *      目标：【IO包下的FilterAPI类】使用Lambda表达式完成
     *      4、IO流--File类:listFile(FileFilter接口)【两行代码】
     *      目标：【IO包下的FilterAPI类】使用Lambda表达式完成
     *      5、集合：
     *      目标【list包下ListAPI类下单元测试：testComparator】
     */
    @Test
    public void homework1(){
        //使用Lambda表达式完成Thread线程创建
        //Thread了Java定义线程类--具备启动start---
        //Thread类封装Runnable类--线程run运行
        Thread t1=new Thread(()->{for(int i=0;i<1000;i++){
            System.out.println("");
        }});
        t1.start();
    }

    @Test
    public void homework2(){
        Runnable mr1=()->{for (int i=0;i<1000;i++){
            System.out.println("");
        }};
        //2.创建Thread线程类--start
        Thread t2=new Thread(mr1);
        //3.启动线程
        t2.start();
    }

    @Test
    public void homework3(){
        File file=new File("."+File.separator);
        FileFilter ff=pathname -> {return pathname.getName().startsWith("s");};
        File[] f=file.listFiles(ff);
        for (int i=0;i<f.length;i++){
            System.out.println("过滤的文件夹和文件夹名字"+f[i].getName());
        }

    }

    @Test
    public void homework4(){
        for (File a:new File("."+File.separator).listFiles(pathname -> pathname.getName().startsWith("s")));
    }

    @Test
    public void homework5(){
        List<String>list=new ArrayList<>();
        list.add("金珉奎");
        list.add("徐明浩");
        list.add("全圆佑");
        list.add("文俊辉");
        Comparator<String>cp=((o1, o2) -> {return o2.length()-o1.length();});
        Collections.sort(list,cp);
        System.out.println("集合"+list);
    }
}

